package com.imut.lagain.repository;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.imut.lagain.entity.NotificationTemplate;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 通知模板数据访问层
 */
@Mapper
public interface NotificationTemplateRepository extends BaseMapper<NotificationTemplate> {
    
    /**
     * 根据代码和启用状态查询模板
     * @param code 模板代码
     * @param enabled 是否启用
     * @return 通知模板
     */
    @Select("SELECT * FROM notification_template WHERE code = #{code} AND enabled = #{enabled}")
    NotificationTemplate findByCodeAndEnabled(@Param("code") String code, @Param("enabled") boolean enabled);
    
    /**
     * 根据代码检查模板是否存在
     * @param code 模板代码
     * @return 是否存在
     */
    @Select("SELECT COUNT(*) > 0 FROM notification_template WHERE code = #{code}")
    boolean existsByCode(@Param("code") String code);
    
    /**
     * 根据微信模板ID检查模板是否存在
     * @param wechatTemplateId 微信模板ID
     * @return 是否存在
     */
    @Select("SELECT COUNT(*) > 0 FROM notification_template WHERE wechat_template_id = #{wechatTemplateId}")
    boolean existsByWechatTemplateId(@Param("wechatTemplateId") String wechatTemplateId);
    
    /**
     * 根据代码和未删除状态查询模板
     * @param code 模板代码
     * @param isDeleted 是否删除
     * @return 通知模板
     */
    @Select("SELECT * FROM notification_template WHERE code = #{code} AND is_deleted = #{isDeleted}")
    NotificationTemplate findByCodeAndIsDeleted(@Param("code") String code, @Param("isDeleted") boolean isDeleted);
    
    /**
     * 根据代码和未删除状态查询模板（返回Optional）
     * @param code 模板代码
     * @return 通知模板
     */
    @Select("SELECT * FROM notification_template WHERE code = #{code} AND is_deleted = false")
    NotificationTemplate findByCodeAndIsDeletedFalse(@Param("code") String code);
    
    /**
     * 根据启用状态和未删除状态查询模板
     * @param enabled 是否启用
     * @param isDeleted 是否删除
     * @return 通知模板列表
     */
    @Select("SELECT * FROM notification_template WHERE enabled = #{enabled} AND is_deleted = #{isDeleted}")
    List<NotificationTemplate> findByEnabledAndIsDeleted(@Param("enabled") boolean enabled, @Param("isDeleted") boolean isDeleted);
    
    /**
     * 根据微信模板ID和未删除状态查询模板
     * @param wechatTemplateId 微信模板ID
     * @return 通知模板
     */
    @Select("SELECT * FROM notification_template WHERE wechat_template_id = #{wechatTemplateId} AND is_deleted = false")
    NotificationTemplate findByWechatTemplateIdAndIsDeletedFalse(@Param("wechatTemplateId") String wechatTemplateId);
    
    /**
     * 根据类型和未删除状态查询模板
     * @param type 模板类型
     * @return 通知模板列表
     */
    @Select("SELECT * FROM notification_template WHERE type = #{type} AND is_deleted = false")
    List<NotificationTemplate> findByTypeAndIsDeletedFalse(@Param("type") String type);
    
    /**
     * 根据创建者ID和未删除状态查询模板
     * @param creatorId 创建者ID
     * @return 通知模板列表
     */
    @Select("SELECT * FROM notification_template WHERE creator_id = #{creatorId} AND is_deleted = false")
    List<NotificationTemplate> findByCreatorIdAndIsDeletedFalse(@Param("creatorId") Long creatorId);
    
    /**
     * 查询所有启用的模板
     * @return 通知模板列表
     */
    @Select("SELECT * FROM notification_template WHERE enabled = true AND is_deleted = false")
    List<NotificationTemplate> findAllEnabledTemplates();
    
    /**
     * 更新模板启用状态
     * @param id 模板ID
     * @param enabled 是否启用
     * @param updateTime 更新时间
     * @return 更新记录数
     */
    @Update("UPDATE notification_template SET enabled = #{enabled}, updated_at = #{updateTime} WHERE id = #{id}")
    int updateEnabledStatus(@Param("id") Long id, @Param("enabled") boolean enabled, @Param("updateTime") LocalDateTime updateTime);
}